home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / X11R4 / cmds / X / ddx / sprite.X11R3 / hdr / cg6var.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-03  |  3.4 KB  |  146 lines

  1. /* @(#)cg6var.h 1.12 89/03/30 SMI */
  2.  
  3. /*
  4.  * Copyright 1988-1989, Sun Microsystems, Inc.
  5.  */
  6.  
  7. #ifndef    cg6var_DEFINED
  8. #define    cg6var_DEFINED
  9.  
  10. #ifndef    FBC_REV0
  11. #define    FBC_REV0    1    /* include FBC0 support if set */
  12. #endif
  13.  
  14. #include <pixrect/cg6fbc.h>
  15. #include <pixrect/cg6tec.h>
  16. #include <pixrect/cg6thc.h>
  17.  
  18. #define CG6_DEPTH    8
  19.  
  20. #ifndef KERNEL
  21.  
  22. #include <pixrect/memvar.h>
  23. #include <pixrect/pr_impl_util.h>
  24.  
  25. /* pixrect private data */
  26. struct cg6pr {
  27.     struct mprp_data mprp;        /* memory pixrect simulator */
  28.     int        fd;        /* device file descriptor */
  29.     struct pr_size    cg6_size;    /* screen size */
  30.     struct fbc    *cg6_fbc;    /* FBC base */
  31.     struct tec     *cg6_tec;    /* TEC base */
  32. };
  33.  
  34. /* pixrect ops vector */
  35. extern struct pixrectops cg6_ops;
  36.  
  37. Pixrect *cg6_make();
  38.  
  39. int cg6_rop();
  40. int cg6_stencil();
  41. int cg6_batchrop();
  42. int cg6_destroy();
  43. int cg6_get();
  44. int cg6_put();
  45. int cg6_vector();
  46. Pixrect *cg6_region();
  47. int cg6_putcolormap();
  48. int cg6_getcolormap();
  49. int cg6_putattributes();
  50. int cg6_getattributes();
  51.  
  52. /* macros */
  53.  
  54. #define cg6_d(pr)     ((struct cg6pr *)(pr)->pr_data)
  55.  
  56. #define    fbc_exception(s)    ((int) (s) < 0)
  57.  
  58. #define    cg6_tec_from_fbc(fbc)    ((struct tec *) PTR_ADD(fbc, 4096))
  59.  
  60. /* clear TEC exception bit */
  61. #define    cg6_fix_tec(tec)    _STMT( \
  62.     if (* (int *) &tec->l_tec_clip < 0) \
  63.         * (int *) &tec->l_tec_clip &= 0x7fffffff; \
  64. )
  65.  
  66. #define cg6_waitidle(fbc) \
  67.     do {;} while ((fbc)->l_fbc_status & L_FBC_BUSY)
  68.  
  69. #define cg6_setfontxy(fbc, x0, x1, y) \
  70.     ((fbc)->l_fbc_x0 = (x0), \
  71.     (fbc)->l_fbc_x1 = (x1), \
  72.     (fbc)->l_fbc_y0 = (y))
  73.  
  74. #define cg6_setinx(fbc, x, y) \
  75.     ((fbc)->l_fbc_autoincx = (x), \
  76.     (fbc)->l_fbc_autoincy = (y))
  77.  
  78. /*
  79.  * return draw status, if full loop until registers available before returning.
  80.  */
  81. #define cg6_draw_done(fbc, r) \
  82.     do \
  83.         (r) = (int) (fbc)->l_fbc_drawstatus; \
  84.     while ((int) (r) < 0 && (r & L_FBC_FULL))
  85.  
  86. /*
  87.  * set clip area.
  88.  */
  89. #define cg6_clip(fbc, x_min, y_min, x_max, y_max) \
  90.     ((fbc)->l_fbc_clipminx = (x_min), \
  91.     (fbc)->l_fbc_clipminy = (y_min), \
  92.     (fbc)->l_fbc_clipmaxx = (x_max), \
  93.     (fbc)->l_fbc_clipmaxy = (y_max))
  94.  
  95. #define cg6_color_mode(fbc, mode) \
  96.     (* ((u_int *) &(fbc)->l_fbc_misc) = \
  97.         (int) L_FBC_MISC_BLIT_NOSRC << 20 | \
  98.         ((int) (mode) & 3) << 17 |    /* data */ \
  99.         (int) L_FBC_MISC_DRAW_RENDER << 15)
  100.  
  101. #define cg6_setregs(fbc, x, y, rop, planemask, fcolor, patt, polyg) _STMT( \
  102.     (fbc)->l_fbc_rasteroffx = (x); \
  103.     (fbc)->l_fbc_rasteroffy = (y); \
  104.     (fbc)->l_fbc_fcolor = (fcolor); \
  105.     cg6_waitidle(fbc); \
  106.     (fbc)->l_fbc_bcolor = 0; \
  107.     (fbc)->l_fbc_status = 0; \
  108.     * ((u_int *) &(fbc)->l_fbc_rasterop) = \
  109.         (int) L_FBC_RASTEROP_PLANE_MASK << 30 | \
  110.         (int) L_FBC_RASTEROP_PIXEL_ONES << 28 | \
  111.         ((int) (patt) & 3) << 26 | \
  112.         ((int) (polyg) & 3) << 24 | \
  113.         (int) L_FBC_RASTEROP_ATTR_SUPP << 22 | \
  114.         (int) L_FBC_RASTEROP_RAST_BOOL << 17 | \
  115.         ((int) (rop) & 15) << 8 |    /* rop10 */ \
  116.         ((int) (rop) & 3) << 2 |    /* rop00 */ \
  117.         ((int) (rop) & 3);        /* rop00 */ \
  118.     (fbc)->l_fbc_planemask = (planemask); \
  119.     cg6_fix_tec(cg6_tec_from_fbc(fbc)); \
  120.     /* can set this before idle in FBC1 */ \
  121.     (fbc)->l_fbc_clipcheck = 0; \
  122. )
  123.  
  124. /*
  125.  * FBC0 workarounds
  126.  */
  127. #if FBC_REV0
  128. int cg6_vector0();
  129.  
  130. #define    fbc_rev0(fbc)    ((((char *)(fbc))[1] & 0xf0) == 0)
  131.  
  132. #define cg6_draw_done0(fbc, x0, x1, r) \
  133.     if (((fbc)->l_fbc_status & L_FBC_DRAW_INTERSECT) && \
  134.         ((x0) < 0 || (x1) < 0)) \
  135.         (r) = L_FBC_DRAW_EXCEPTION; \
  136.     else cg6_draw_done((fbc), (r))
  137. #else FBC_REV0
  138. #define    fbc_rev0(fbc)    (0)
  139. #define cg6_draw_done0(fbc, x0, x1, r) \
  140.     cg6_draw_done((fbc), (r))
  141. #endif FBC_REV0
  142.  
  143. #endif !KERNEL
  144.  
  145. #endif !cg6var_DEFINED
  146.